package com.googlecode.gwt.test.jso;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArrayMixed;
import com.google.gwt.core.client.JsonUtils;
import com.google.gwt.dom.client.AnchorElement;
import com.google.gwt.dom.client.Document;
import com.googlecode.gwt.test.GwtTestTest;
import org.junit.Before;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class JsArrayMixedTest extends GwtTestTest {
private JsArrayMixed jsArrayMixed;
@Before
public void beforeJsArrayIntegerTest() {
// Given
jsArrayMixed = JavaScriptObject.createArray().cast();
assertThat(jsArrayMixed.length()).isEqualTo(0);
// When
jsArrayMixed.set(4, true);
// Then
assertThat(jsArrayMixed.length()).isEqualTo(5);
assertThat(jsArrayMixed.getBoolean(3)).isFalse();
assertThat(jsArrayMixed.getString(3)).isNull();
assertThat(jsArrayMixed.getBoolean(4)).isTrue();
assertThat(jsArrayMixed.getString(4)).isEqualTo("true");
}
@Test
public void getStringElement() {
// Given
AnchorElement anchor = Document.get().createAnchorElement();
anchor.setHref("http://lost.com");
jsArrayMixed.set(2, anchor);
// When
String elementToString = jsArrayMixed.getString(2);
// Then
assertThat(elementToString).isEqualTo("<a href=\"http://lost.com\"></a>");
}
@Test
public void getStringJSON() {
// Given
JavaScriptObject json = JsonUtils.safeEval("{test: true}");
jsArrayMixed.set(2, json);
// When
String elementToString = jsArrayMixed.getString(2);
// Then
assertThat(elementToString).isEqualTo("{ \"test\": true }");
}
@Test
public void join() {
// When
String join = jsArrayMixed.join();
// Then
assertThat(join).isEqualTo(",,,,true");
}
@Test
public void join_AfterResize() {
// Given
jsArrayMixed.setLength(3);
// When
String join = jsArrayMixed.join();
// Then
assertThat(jsArrayMixed.length()).isEqualTo(3);
assertThat(join).isEqualTo(",,");
}
@Test
public void push() {
// When
jsArrayMixed.push("pushed");
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo(",,,,true,pushed");
assertThat(jsArrayMixed.getString(jsArrayMixed.length() - 1)).isEqualTo("pushed");
}
@Test
public void shiftBoolean() {
// Given
jsArrayMixed.set(0, true);
// When
boolean shift = jsArrayMixed.shiftBoolean();
// Then
assertThat(shift).isTrue();
assertThat(jsArrayMixed.length()).isEqualTo(4);
assertThat(jsArrayMixed.join()).isEqualTo(",,,true");
}
@Test
public void shiftInteger() {
// Given
jsArrayMixed.set(0, 4);
// When
double shift = jsArrayMixed.shiftNumber();
// Then
assertThat(shift).isEqualTo(4);
assertThat(jsArrayMixed.length()).isEqualTo(4);
assertThat(jsArrayMixed.join()).isEqualTo(",,,true");
}
@Test
public void shiftObject() {
// Given
JavaScriptObject jso = JavaScriptObject.createObject();
jsArrayMixed.set(0, jso);
// When
JavaScriptObject shift = jsArrayMixed.shiftObject();
// Then
assertThat(shift).isEqualTo(jso);
assertThat(jsArrayMixed.length()).isEqualTo(4);
assertThat(jsArrayMixed.join()).isEqualTo(",,,true");
}
@Test
public void shiftString() {
// Given
jsArrayMixed.set(0, "shifted");
// When
String shift = jsArrayMixed.shiftString();
// Then
assertThat(shift).isEqualTo("shifted");
assertThat(jsArrayMixed.length()).isEqualTo(4);
assertThat(jsArrayMixed.join()).isEqualTo(",,,true");
}
@Test
public void unboundedGet_Returns0() {
// When
boolean unboundedBoolean = jsArrayMixed.getBoolean(100);
String unboundedString = jsArrayMixed.getString(100);
double unboundedDouble = jsArrayMixed.getNumber(100);
JavaScriptObject unboundedObject = jsArrayMixed.getObject(100);
// Then
assertThat(unboundedBoolean).isFalse();
assertThat(unboundedString).isNull();
assertThat(unboundedDouble).isEqualTo(0);
assertThat(unboundedObject).isNull();
}
@Test
public void unshiftBoolean() {
// When
jsArrayMixed.unshift(true);
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo("true,,,,,true");
}
@Test
public void unshiftElement() {
// Given
AnchorElement anchor = Document.get().createAnchorElement();
anchor.setHref("http://lost.com");
// When
jsArrayMixed.unshift(anchor);
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo("<a href=\"http://lost.com\"></a>,,,,,true");
}
@Test
public void unshiftJSON() {
// Given
JavaScriptObject json = JsonUtils.safeEval("{test: true}");
// When
jsArrayMixed.unshift(json);
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo("{ \"test\": true },,,,,true");
}
@Test
public void unshiftNumber() {
// When
jsArrayMixed.unshift(23);
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo("23.0,,,,,true");
}
@Test
public void unshiftString() {
// When
jsArrayMixed.unshift("unshifted");
// Then
assertThat(jsArrayMixed.length()).isEqualTo(6);
assertThat(jsArrayMixed.join()).isEqualTo("unshifted,,,,,true");
}
}